package org.example.memora.service.serviceImpl;

import org.example.memora.entity.Tag;
import org.example.memora.mapper.TagMapper;
import org.example.memora.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Date;

@Service
public class TagServiceImpl implements TagService {

    @Autowired
    private TagMapper tagMapper;
    @Override
    public boolean existsAllByIds(Iterable<Integer> tagIds) {
        // 1. 先把 Iterable 转成 List
        List<Integer> list = new ArrayList<>();
        tagIds.forEach(list::add);

        // 如果空列表，可以直接认为全都存在或直接返回 true/false 看你需求
        if (list.isEmpty()) {
            return true;
        }

        // 2. 查数据库实际存在多少条
        int count = tagMapper.countByIds(list);

        // 3. 如果 count == list.size()，说明全部存在
        return count == list.size();
    }



    @Override
    public Tag getById(Long id) {
        // 直接调用自定义方法
        return tagMapper.selectById(id);
    }

    @Override
    public boolean createTag(String name) {
        // 1. 先检查是否已存在
        Tag exist = tagMapper.selectByName(name);
        if (exist != null) {
            return false;
        }
        // 2. 不存在就创建
        Tag tag = new Tag();
        tag.setName(name);
        tag.setStatus(1);
        tag.setSortOrder(0);
        tag.setCreateTime(new Date());
        int rows = tagMapper.insertTag(tag);
        return rows > 0;
    }

    @Override
    public boolean createTags(List<String> names) {
        for (String name : names) {
            Tag exist = tagMapper.selectByName(name);
            if (exist != null) {
                continue; // 已存在同名标签
            }
            // 2. 不存在就创建
            Tag tag = new Tag();
            tag.setName(name);
            tag.setStatus(1);
            tag.setSortOrder(0);
            tag.setCreateTime(new Date());
            int rows = tagMapper.insertTag(tag);
        }
        return true;
    }

    @Override
    public boolean updateTag(Tag tag) {
        // 比如只更新状态或排序等
        int rows = tagMapper.updateTag(tag);
        return rows > 0;
    }

    @Override
    public boolean disableTag(Long id) {
        // 先查
        Tag tag = tagMapper.selectById(id);
        if (tag == null) {
            return false;
        }
        // 改 status
        tag.setStatus(0);
        int rows = tagMapper.updateTag(tag);
        return rows > 0;
    }

    @Override
    public List<Tag> getTagsByName(String name) {
        // 模糊查询+只搜启用
        return tagMapper.selectByNameLike(name);
    }

    @Override
    public List<Tag> listAll() {
        return tagMapper.selectAll();
    }
}
